Unity 5.5.1でIAPを含んだプロジェクトが面白いくらいCPUを食う問題について
概要
やあ、全国のUnity5.5.1のCPU使用率が100%を超えるみんな。
問題とその解決策を見つけたのでちょっと書いた。
Unity 5.5.0 -> 5.5.1へと移行したら、CPU使用率がウケル感じになる
こんな感じに。
症状としては、
・IAPの利用コードがあるプロジェクトをPlayをすると、UnityのCPU使用率がすっげーアガる
・Playを停めても上がったまま
・Unity再起動すると治るが、Playを押すとまた発生する
というもの。
と言っても問題なのはプロジェクトではなく、プロジェクトに含まれている
Unity IAPのライブラリのバージョン だった。
古いバージョンのUnity IAPライブラリが含まれているプロジェクトを新しいUnity EditorでPlayするとCPUが青天井になる
ということがわかった。
解消方法としては簡単で、
・Unity IAPのライブラリを更新する
という感じ。
具体的にいうと、
Unity IAP is up to date
って出るまでReimportボタンを押せばいいと思う。
問題点の切り分け
まず、あるコードを実行すると、CPUが跳ね上がっているという情報をもらった。環境はUnity5.5.1p4とのこと。
自分の方では手元に5.5.1p3があったので、まずp3で同じ事象が起こるかどうか試してみた。
・5.5.1p3であるプロジェクトをPlay、確かにCPU使用率がいい感じに跳ね上がるのを確認した。
・同じプロジェクトを5.5.0p4でチェックすると、CPU使用率は跳ね上がらなかった。
・そのプロジェクトは5.5.0p4での生成時に取得していたIAPのdllを含んでいた。
・5.5.1p3で動作時、どの処理があったらCPUが跳ね上がるのか確認していくと、IAPの関数を実行した時点からCPUが上がって行くのが確認できた。
という感じ。
実際にCPU持って行く箇所はどこなのか
実際にCPUを持っていくのは、UnityEditor上でPlayを押した際、StoreのアイテムIdとかを設定する処理を行う部分。
UnityPurchasing.Initialize 関数の中。
一度Playすると、たとえ停止をしてもそのCPUのアガりっぷりは衰えない。
なにこれこわい。
該当の UnityPurchasing.Initialize 関数自体を実行しなくなると、CPUが跳ね上がる問題は消える。
まあ課金処理ができなくなるんですけど。
Unity IAP、自分自身ではバージョンが古いからアップデートしてね!みたいなこと一切言わないのだけれど、
もしかしてな~~って思ってServicesのIN-APP-PURCHASING の項を見に行ったら、更新できるよっていう感じだったので
二度ほど押せて、二度コンパイルが走ったあとで治った。
今後の対処方
こういうのなんか、、難しいね、、、
実行コード上からは、IAPライブラリのバージョンを気にするようなことはないので、エラーの原因に気づけない。
UnityのServicesのUIを見に行ってやっと気づく。というかそこを見ても原因かどうかは気づけない。
試して「あっ治った」っていう状態があるのが、まあ、今の俺、という程度。
UnityEditorのバージョンと、配布されてたIAPのライブラリの食い合わせ問題みたいなのがあるんだろうか。
このエディタだったらこのバージョン以上のIAPライブラリ使ってなかったらWarning みたいなのは作れるかもしれないな。
UnityのIAPのライブラリ、痒いところに手が届く素晴らしいバランス(運用スタイルによるがAndroidとかの堅牢性を信じてない人であれば全く問題ない設計)なので
極力使用したい。
追記
他にも原因となる要素があるっぽい。
自分の場合はこれだった、、のか?よくわかってないが出てない。
続報が出せたら書く。